package com.java.control;

import java.io.IOException;
import java.util.Enumeration;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.java.bean.UserInfoBean;
import com.java.model.UserInfoModel;
import com.java.utils.EasyFactory;
import com.java.utils.MyUtils;

/**
 * Servlet implementation class LoginControl
 */
/* 注解和servlet的web配置，只能二选一，一个servlet配置不能同时使用注解和web配置 */
@WebServlet("/LoginControl")
public class LoginControl extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 使用实体类作为参数的载体，将request获取的表单数据，对应的存入参数载体实体类中
		// 对应关系：要求标签控件的name属性值要和实体类的属性名一致（严格区分大小写）
		UserInfoBean userInfoB = MyUtils.convertRequest2BeanWithFileUpload(request, UserInfoBean.class);

		System.out.println("使用公共方法将表单的值赋值给实体类：" + userInfoB.toString());

		// 调用model层进行登录验证
		List<UserInfoBean> lst = EasyFactory.getNewInstance(UserInfoModel.class).queryLoginInfo(userInfoB);
		if (lst != null && lst.size() > 0) {
			// 使用重定向或者转发跳转到登录成功页面
			// 缓存登录成功之后的信息
			request.getSession().setAttribute("lst", lst);
			request.getSession().setAttribute("userInfoB", lst.get(0));
			// 转发到登录成功页面
			request.getRequestDispatcher("WEB-INF/logined.jsp").forward(request, response);
			// 使用重定向:重定向不能直接访问web项目的WEB-INF目录
			// response.sendRedirect("WEB-INF/logined.jsp");
			/*
			 * web项目的WEB-INF目录是站点安全目录；只能通过转发才能访问其中的资源文件；
			 */
		} else {
			// 重定向到登录页面继续登录，因为登录页面没有在web-info目录下，所有使用重定向和转发都可以访问
			response.sendRedirect("index.jsp");
		}
	}

}
